package chapter_02

/**
  *
  * @author Pop
  * @date 2022/6/6 23:06
  */
object Test07_DataType {

  def main(args: Array[String]): Unit = {

    /**
      * Unit 代表空值
      * Null 代表空引用
      * Nothing 是所有对象的子类
      * 表示什么也没有，既没有值也没有引用
      */

    def m1():Unit = {
      println("m1被執行调用")
    }

    val  a:Unit = m1()
    println(a) // （）


    // 空引用
    val s = null //执行会报错，常量是无法被赋值null的
//    var s = new Student() s = null

    /**
      * Nothing是所有对象的子类
      * 当你的方法原本是返回一个Int类型的时候，
      * 可是方法执行中发生了异常，这个时候即便是返回值也是无法正确返回的
      * 在java中是这样的，但是在scala中，你的返回值是Int类型
      * 你可以定义成Nothing，当你抛出了异常，没有任何返回也可以定义
      * 成Nothing，这样就有了很好的兼容
      */
    def  m2(n:Int):Nothing = {
//      if(n==0){
//        return  n
//      }
      //如果抛出了异常，这个方法也是可以正常返回的
      throw  new NullPointerException()
    }

    def  m3(n:Int):Int = {//是公共父类
      if(n==0){
        return  n
      }
      //如果抛出了异常，这个方法也是可以正常返回的
      throw  new NullPointerException()
    }

    val b = m2(0)
    println(b)


  }

}
